package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * <h1>返回操作枚举</h1>
 * <pre>用于返回前端状态码、错误码</pre>
 * @className ResultEnum
 * @author dujg
 * @date 2021/7/16 16:03
 * @copyright : Sysware Technology Co., Ltd
 */
public enum ResultEnum {
    /**服务信息状态码**/
    SUCCESS("200", "操作成功！"),//操作成功
    WARN("209", "操作成功！"),//操作成功，带警告说明，支持使用后端的验证提醒。（code==209,后端msg)
    ERROR("500", "操作失败！"),//操作失败
    WRONG("509", "{}"),//操作失败，带警告说明，支持使用后端的验证提醒。（code==509,后端msg)
    ERROR530("530", "未登录！"),
    REFRESH("555","数据已被其他用户更新，请刷新页面后再试！"),//数据已被其他用户更新，请刷新页面后再试！
    CODE9999("9999", "系统繁忙，请稍后再试...."),

    /**权限操作状态码**/
    AZ("300", "未认证！"),
    AC_NPASS("301", "没有操作权限！"),//权限认证失败
    AC_PASS("200", "认证通过！"),//权限认证成功
    AC_INFO("303","仅{}有权操作。"),//
    /**业务操作状态码**/
    CODE99("99", "{}"),//验证失败，返回验证信息
    CODE100("100", "无法建立连接！"),
    CODE101("101", "对象不存在！"),
    CODE102("102", "{}存在重复！"),
    CODE103("103", "查询不到相应的数据！"),
    CODE104("104", "{}已被占用！"),
    CODE105("105", "{}已存在！"),
    CODE106("106", "不允许输入{}关键字！"),
    CODE107("107", "{}的状态不允许操作！"),
    CODE108("108", "无法获取到用户！"),
    CODE109("109", "{}不能超出{}位字符！"),
    CODE110("110", "{}不能为空！"),
    CODE111("111", "{}参数名不存在！"),
    CODE112("112", "找不到{}！"),
    CODE113("113","暂无数据!"),
    CODE114("114","请检查您调用的请求接口是否正确!"),


    /**校验状态码  600~699 **/
    CODE600("600", "{}"),  //空值、null值参数信息
    CODE601("601", "{}"),  //不符合规则参数信息
    CODE602("602", "{}"),  //长度不符合规则参数信息




    CODE1001("1001", "必选参数为空！"),
    CODE1002("1002", "参数格式错误！"),
    CODE1003("1003", "参数解析错误！"),
    CODE1004("1004", "所选对象不能删除！"),
    CODE1005("1005", "{}条成功，{}条失败！"),
    CODE1006("1006", "请先启动父任务。"),
    CODE1007("1007", "仅状态为未接受的任务才能接受。"),
    CODE1008("1008", "仅状态为进行中的任务才能完成。"),
    CODE1009("1009", "SOP时间不能早于子项目下阀门的计划评审时间。"),
    CODE1010("1010", "仅状态为未下发、进行中的相同子项目、相同类型的任务才能操作。"),
    CODE1011("1011", "仅相同项目，且状态为已完成、已终止的任务才能操作"),
    CODE1012("1012", "没有操作权限。"),
    CODE1013("1013", "仅支持同一类型任务完成。"),
    CODE1014("1014", "子任务未完成，操作失败。"),
    CODE1015("1015", "仅支持同一类型任务重启。"),
    CODE1016("1016", "仅所属子项目的状态为进行中、已暂缓的任务才能重启。"),
    CODE1017("1017", "请先重启父任务。"),
    CODE1018("1018", "{}的前置任务未完成，确认要接受吗？"),
    CODE1019("1019", "请先勾选二级计划节点后再操作。"),
    CODE1020("1020", "仅状态为进行中的二级计划节点才能终止。"),
    CODE1021("1021", "仅状态为进行中的节点才能终止。"),
    CODE1022("1022", "子项目状态为{}，不允许操作。"),
    CODE1023("1023", "仅状态为已完成、已终止的计划节点才能重启。"),
    CODE1024("1024", "仅状态为已完成、已终止的二级计划节点才能重启。"),
    CODE1025("1025", "主计划状态为{}，不允许操作。"),
    CODE1026("1026", "仅状态为未下发的计划节点才能下发。"),
    CODE1027("1027", "请先发布主计划后再操作。"),
    CODE1028("1028", "请先下发主计划后再操作。"),
    CODE1029("1029", "仅状态为未下发的二级计划节点才能下发。"),
    CODE1030("1030", "项目管理模板不存在。"),
    CODE1031("1031", "不存在的枚举值。"),
    CODE1032("1032", "同一项目模板下代号不允许重复，添加失败。"),
    CODE1034("1034", "该项目权限方案已应用于项目，删除失败。"),
    CODE1035("1035", "请先修改权限方案名称再操作。"),
    CODE1036("1036", "{}已关联计划节点，不能删除"),
    CODE1037("1037", "子项目状态为{}，不允许操作计划"),
    CODE1038("1038", "同一子项目下代号不允许重复，添加失败。"),
    CODE1039("1039", "请选择权限类型。"),
    CODE1040("1040", "请选择权限。"),
    CODE1041("1041", "请选择项目角色。"),
    CODE1042("1042", "请选择行政角色。"),
    CODE1043("1043", "请选择项目。"),
    CODE1044("1044", "请选择用户。"),
    CODE1045("1045", "项目已关联模板，操作失败。"),
    CODE1046("1046", "仅支持格式为Excel的文件进行上传。"),
    CODE1047("1047", "仅状态为未送审、未通过的会议纪要才能删除。"),
    CODE1048("1048", "仅状态为未送审、未通过的会议纪要才能删除议题。"),
    CODE1049("1049", "仅状态为草稿的问题才能删除"),
    CODE1050("1050", "仅状态为草稿的问题才能发布。"),
    CODE1051("1051", "仅状态为未解决的问题才能关闭。"),
    CODE1052("1052", "仅状态为未解决的问题才能申请关闭。"),
    CODE1053("1053", "仅状态为已通过的会议纪要才能转为问题"),
    CODE1054("1054", "仅状态为{}的{}才能{}。"),
    CODE1055("1055", "主计划节点状态为终止审批中，不允许操作。"),
    CODE1056("1056", "父节点状态为终止审批中，不允许操作。"),
    CODE1057("1057", "名称不能超过40个字符。"),
    CODE1058("1058", "描述不能超过200个字符。"),
    CODE1059("1059", "任务id不能为空。"),
    CODE1060("1060", "模型类型不能为空。"),
    CODE1061("1061", "密级不能为空。"),
    CODE1062("1062", "阀门不能为空。"),
    CODE1063("1063", "领域不能为空。"),
    CODE1064("1064", "数据管控级别不能为空。"),
    CODE1065("1065", "交付物层级不能为空。"),
    CODE1066("1066", "输入输出属性不能为空。"),
    CODE1067("1067", "名称不能为空。"),
    CODE1068("1068","请先设置责任人后再操作"),
    CODE1069("1069","仅状态为未下发、进行中的相同项目、相同类型的任务才能操作"),
    CODE1070("1070","仅状态为未下发、进行中的相同项目、相同类型的任务才能操作"),

    CODE2001("2001", "仅状态为{}的任务才能{}。"),
    CODE2002("2002", "请先勾选{}后再操作。"),
    CODE2003("2003", "请选择{}部门。"),
    CODE2004("2004", "请选择{}人。"),
    CODE2005("2005", "请输入{}原因。"),
    CODE2006("2006", "请选择{}开始时间。"),
    CODE2007("2007", "请输入{}之间的字符。"),
    CODE2008("2008", "任务的协作人不能与责任人相同"),
    CODE2009("2009", "不能{}给自己！"),
    CODE2010("2010", "存在已作废的数据不允许{}"),

	CODE5000("5000","{}"),
	CODE5001("5001","计划完成时间不能晚于评审会的计划评审时间"),
    CODE5002("5002","计划完成时间不能晚于阀门的计划评审时间"),
    CODE5003("5003","计划完成时间不能晚于父计划的计划完成时间"),
    CODE5004("5004","请先删除二级计划或活动后再操作。"),
    CODE5006("5006","{}，删除失败。"),
    CODE5007("5007","已经置顶无法继续上移"),
    CODE5008("5008","已经置底无法继续下移"),
    CODE5009("5009","已经置顶!"),
    CODE5010("5010","阀门的计划评审时间为空，发布失败。"),
    CODE5011("5011","计划开始时间不得晚于计划完成时间。"),
    CODE5012("5012","主责部门与责任人内容不匹配，请重新选择"),
    CODE5013("5013","责任人与主责部门内容不匹配，请重新选择"),
    CODE5014("5014","评审会与阀门内容不匹配，请重新选择"),
    CODE5015("5015","阀门与评审会内容不匹配，请重新选择"),
    CODE5016("5016","该编号已被占用"),
    CODE5017("5017","请输入数字或字母"),
    CODE5018("5018","计划完成时间早于流程中最晚的计划完成时间"),
    CODE5019("5019","计划开始时间晚于流程中最早的计划开始时间"),
    CODE5020("5020","请先发布计划节点后再操作。"),
    CODE5021("5021","软件发布计划已全部锁定！"),
    CODE5022("5022","计划开始时间不能早于父计划的计划开始时间"),
    CODE5023("5023","议题已经转为问题，无法操作。"),
    CODE5024("5024","问题存在为空的必填项，请先编辑后再发布。"),
    CODE5025("5025","已生成版本的任务数据不允许删除，仅能作废。"),
    CODE5026("5026","存在不符合条件的数据，作废失败。"),
    CODE5027("5027","存在未作废的数据不允许恢复。"),
    CODE5028("5028","已作废的数据不允许操作。"),
    CODE5029("5029","该节点不能引用。"),
    CODE5030("5030","所属阀门已发布的根节点已全部发布，发布子节点请在对应子任务列表中进行操作。"),
    CODE5031("5031","请先{}父节点后再操作。"),
    CODE5032("5032","计划完成时间不能晚于父的计划完成时间"),
    CODE5033("5033","计划开始时间不能早于父的计划开始时间"),
    CODE5034("5034","系统与专业组内容不匹配，请重新选择"),
    CODE5035("5035","未生成版本的数据，不允许操作。"),
    CODE5036("5036","任务状态为已完成，不允许操作。"),
    CODE5037("5037","任务状态为已终止，不允许操作。"),
    CODE5038("5038","当前枚举类型不允许此操作。"),
    CODE5039("5039","该编号已被占用"),
    CODE5040("5040","项目的计划完成时间不得早于子项目的计划完成时间"),
    CODE5041("5041","子项目的计划完成时间不得晚于项目的计划完成时间"),
    CODE5042("5042","该计划节点模板下已有子计划节点模板，请先删除子计划节点模板后再修改。"),
    CODE5043("5043","该计划节点模板已关联流程模板，请先取消关联后再修改。"),
    CODE5044("5044","仅状态为编制中、已终止的计划节点才能删除。"),
    CODE5045("5045","该计划节点下已有子计划节点，请先删除子计划节点后再修改“是否允许关联流程”属性。"),
    CODE5046("5046","该计划节点下已有流程，请先清空流程后再修改“是否允许关联流程”属性。"),
    CODE5047("5047","仅评审状态为未通过的阀门，才能删除。"),
    CODE5048("5048","请先勾选同父下同层任务后再操作。"),

//数据中心操作错误码
    CODE8001("8001","该分类下已有数据、基线，不允许删除！"),
    CODE8002("8002","已经置底无法继续下移。"),
    CODE8003("8003","相同节点下的方案名称不允许重复。"),
    CODE8004("8004","只有状态为编制中的基线才能删除！"),



// TODO: 2021/7/16 10000前数字的CODE码作为平台来使用,10000后的数字包括10000的作为项目的CODE码来使用 注意！！！
// TODO: ===========================================平台与项目CODE码分割线====================================================
// TODO: 2021/7/16 尽量给前端返code码，这样的好处是开发工具可以直接点击这个code码直观查找代码哪里在调用，也能清晰看到业务限制等 注意！！！

    CODE10000("10000","项目的code码");

    private final Logger logger = LoggerFactory.getLogger(ResultEnum.class);

    private String code;
    private String message;

    ResultEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return Integer.parseInt(code);
    }
    public String getMessage() {
        return message;
    }
	public void setMessage(String message) {
		this.message = message;
	}

    public static ResultEnum getResultEnum(String code) {
        for (ResultEnum c : ResultEnum.values()) {
            if (c.getCode() == Integer.parseInt(code)) {
                return c;
            }
        }
        return null;
    }
    public static void main(String[] args) {
        System.out.println(ResultEnum.CODE101.name());
    }

}
